import fitz
from PIL import Image
import subprocess

def pdf_to_images(pdf_path, output_folder):
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)

    # 将整个 PDF 保存为 XPS 文件
    xps_path = f"{output_folder}output.xps"

    # 使用 Ghostscript 将 PDF 转换为 XPS
    gs_path = r'E:\Program Files\gs\gs10.02.1\bin\gswin64c.exe'  # 替换为你的 Ghostscript 路径
    subprocess.run([gs_path, "-o", xps_path, "-sDEVICE=pngalpha", pdf_path])

    # 用 Fitz 打开 XPS 文件
    xps_document = fitz.open(xps_path)

    for page_number in range(xps_document.page_count):
        # 获取 XPS 页面
        page = xps_document[page_number]

        # 获取页面的图像
        image_list = page.get_images(full=True)

        # 遍历图像列表
        for image_index, img_info in enumerate(image_list):
            # 获取图像的字节数据
            image_bytes = page.get_pixmap(image_index).tobytes()

            # 使用 PIL 创建图像对象
            image = Image.frombytes("RGB", (img_info["width"], img_info["height"]), image_bytes)

            # 保存图像
            image_path = f"{output_folder}page_{page_number + 1}_img_{image_index + 1}.png"
            image.save(image_path)

            print(f"{output_folder}Page {page_number + 1}, Image {image_index + 1} saved as {image_path}")

    # 关闭 XPS 文件
    xps_document.close()

    # 关闭 PDF 文件
    pdf_document.close()

# 调用函数并传入 PDF 文件路径和输出文件夹路径
pdf_path = 'D:\\Users\\65720\\Desktop\\电信项目-方案\\文艺\\勇罕 2022年 第 4 期\\勇罕 2022年 第 4 期.pdf'
output_folder = 'D:\\Users\\65720\\Desktop\\电信项目-方案\\文艺\\勇罕 2022年 第 4 期\\'
pdf_to_images(pdf_path, output_folder)
